// pages/cart/cart.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},  //收货地址
    cart:[],      //添加到购物车的数据
    checkedAll:false,  //全选按钮
    totalprice:0,     //总价
    totalnum:0,      //总数量
    checked:true
  },
  // 购物车数据处理函数
  // 该函数主要负责购物车内  cart, checkedAll, totalprice, totalnum  
  // 数据的处理，以及将数据再存入缓存，及data中
  cartset(cart){   //将cart作为参数传入函数进行处理
    //拿到cart对象，先存到缓存中
    wx.setStorageSync('cart', cart)
    //重新赋值
    let checkedAll = cart.length > 0 ? cart.every(v => v.checked) : false  //every遍历数组
    // every() 方法用于检测数组所有元素是否都符合指定条件（通过函数提供）。
    // every() 方法使用指定函数检测数组中的所有元素：
    // •	如果数组中检测到有一个元素不满足，则整个表达式返回 false ，且剩余的元素不会再进行检测。
    // •	如果所有元素都满足条件，则返回 true。
    // 注意： every() 不会对空数组进行检测。
    // 注意： every() 不会改变原始数组。

    let totalprice = 0
    let totalnum = 0
    cart.forEach(
      v => {
        if (v.checked) {
          totalprice += v.num * v.goods_price;
          totalnum += v.num;
        }
      }

    )
    this.setData({
      cart,
      checkedAll,
      totalprice,
      totalnum
    })
  },

//handleitemchange 用于监视购物车中的商品选中按钮 
  handleitemchange(e){
    //获取传递的商品id
let goods_id=e.currentTarget.dataset.id
    // console.log(doods_id)
    let {cart}=this.data
    //获取到当前选中的商品的index，是cart中的第几个
    let index=cart.findIndex(v => v.goods_id===goods_id)
    //修改商品前的选购checked值
    cart[index].checked = !cart[index].checked
    // this.setData({   
    //   cart
    // })
    //保存修改
    this.cartset(cart)
  },

  //获取收货地址函数方法，分两种进行
  handleChooseAddress(){
// console.log("...")
//获取用户权限
    wx.getSetting({   //getSetting中有用户最基本的权限请求
  success:res=>{
    // console.log(res)
    if(res.authSetting['scope.address']===true||res.authSetting['scope.address']===undefined)
    {
    //  获取收货地址
wx.chooseAddress({
  success:(res1)=>{
let address=res1
// console.log(address)
wx.setStorageSync('address', address)  //将得到的地址缓存
  }

}) 
    }
    else{    //拒绝获取地址后，重新获得权限获取地址
      wx.openSetting({
        success: (res2)=>{
          // console.log(res2)
              //  获取收货地址
wx.chooseAddress({
  success:(res3)=>{
    // console.log(res3)
    let address = res3
    // console.log(address)
    wx.setStorageSync('address', address)
  }
}) 
        },
      });
    }
  }
})
  },

//购物车中商品的数量的加减
handleItemNum(e){
  // console.log("戴安极了")

  //接受两个参数
  let { id, operation } = e.currentTarget.dataset
  //将data中的cart解构出来
  let {cart}=this.data
  const index=cart.findIndex(v=>v.goods_id===id)
  // console.log(index)
  if (cart[index].num===1&&operation===-1)
  {
    wx.showModal({     //弹出对话框
      title: '提示',
      content: '你是要删除此商品吗',
      success:(res)=>{
        if (res.confirm) {
        cart.splice(index,1)
          this.cartset(cart)
        } else if (res.cancel){
          
        }
      }
    })
  }else{
    cart[index].num += operation
    this.cartset(cart)
  }

},


//结算功能
  handlePay(){
    //通过对地址，商品的有无，来判断，是否跳转到支付页面
    let { address, totalnum}=this.data
    if(address.length===0)
    {
      wx.showToast({
        title: '你还没有填写收货地址', 
      })
      return
    }
    if (totalnum===0){
      wx.showToast({
        title: '你还没有选购商品',
      })
      return
    }

wx.navigateTo({
  url: '/pages/pay/pay',
})

  },


  //全选功能
  handleChooseall(){
    let { cart, checkedAll}=this.data
    checkedAll = !checkedAll
    cart.forEach(v => v.checked = checkedAll)
    this.cartset(cart)
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
 let address=wx.getStorageSync("address")
//  console.log(address)
 let cart=wx.getStorageSync('cart')||[]
    this.cartset(cart)
    this.setData({
      address
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})